// 欢迎进入有赞校招 Coding 环节，本环节一共设置有两道题目，时间为 30 分钟
// 右上角的绿色按钮可以运行程序，并会把 console.log 输出在右侧的面板上，方便调试程序
// 黄色按钮可以清除所有的输出记录
// **** 温馨提示：可以先做自己有思路的题目，把握好时间哦~ *****

// ******************** 题目 1 ********************
// 自己动手实现 Array 的 slice 函数

var slice = function (array, start, end) {
  const result = [], len = array.length
  if (start === undefined) {
    start = 0
    end = len
  }
  start < 0 && (start += len)
  end = end || len
  // console.log(start, end)
  for (let i = start; i < end; i++) {
    result.push(array[i])
  }
  return result
}

let array = [1, 2, 3, 4, 5]
// console.log(slice(array))
// console.log(slice(array, 1))
// console.log(slice(array, 1, 4))
// console.log(slice(array, -1)) // [5]


// ******************** 题目 2 ********************
// 给定两个整数 n 和 k，返回范围 [1, n] 中所有可能的 k 个数的组合。
// 你可以按 任何顺序 返回答案。
// 示例 1
// 输入：n = 4, k = 2
// 输出：
// [
//   [2,4],
//   [3,4],
//   [2,3],
//   [1,2],
//   [1,3],
//   [1,4],
// ]

/*
 * @param {number} n
 * @param {number} k
 * @return {number[][]}
 */
var combine = function (n, k) {
  if (n === k) return [Array.from(new Array(n), (x, i) => i + 1)]
  if (k === 1) return Array.from(new Array(n), (x, i) => [i + 1])
  return [...combine(n - 1, k - 1).map(item => [...item, n]), ...combine(n - 1, k)]
};
console.log(combine(4, 2))